package minijvm.util;

/**
 * @author ChangLiang
 * @date 2020/4/12
 */
public class Util {


    /**
     * 将byte[] 转换为 无符号Integer
     * byte[0] -54 => hex ca =>202
     * @param codes
     * @return
     */
    public static int byteToInt(byte[] codes) {
        String s1 = byteToHexString(codes);
        return Integer.valueOf(s1, 16).intValue();
    }

    /**
     * 字节数组 转换为 16进制表达的字符串
     *
     * @param codes
     * @return
     */
    public static String byteToHexString(byte[] codes) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < codes.length; i++) {
            byte b = codes[i];
            // byte在java中是有符号的数 -128~127，其第一位是符号位，byte -54  需要&上 0xFF，将符号位清除掉
            // 并且将1个字节的byte 转换为 4个字节的int
            // 直接转int不行，这样转换完成之后，仍旧是-54，只是位数增加了
            int value = b & 0xFF;
            // input: 170
            // output: 170/160=10 170%160=10  aa
            String strHex = Integer.toHexString(value);
            if (strHex.length() < 2) {
                strHex = "0" + strHex;
            }
            buffer.append(strHex);
        }
        return buffer.toString();
    }
}
